Organizations increasingly rely on computer data in a variety of contexts. Sometimes, organizations may want to perform a live backup (i.e., back up data that is currently in use and which may therefore change during a backup process). In order to maintain a consistent view of the data (e.g., to ensure that all data in a backup reflects a single moment in time), organizations may use a backup system that takes a snapshot of the data at a desired backup time.
Taking a snapshot of a large volume of data by making a copy of the entire volume may be very inefficient in terms of time and computing resources. To efficiently maintain a snapshot of a large volume of data, backup systems may use copy-on-write techniques, which make copies of blocks of data before the blocks are overwritten.
Although traditional copy-on-write techniques may form a more efficient basis for performing live backup than copying an entire volume of data, traditional techniques may still consume a significant amount of resources. For example, making a copy of each original block of data in the snapshot that is overwritten may interfere with the I/O performance of live applications. Furthermore, storing each copy made during the live backup may consume a significant amount of storage space on the volume. In some cases, the volume being backed up may even run out of space due to the copied blocks, leaving the backup system unable to continue maintaining the snapshot.